package com.warom.sdg.util;

import android.content.Context;
import android.util.Log;

import com.warom.sdg.config.MeasurementPoint;
import com.warom.sdg.config.PlcMeasurementConfig;
import com.warom.sdg.dto.PointDataReportDto;
import com.warom.sdg.model.PlcDeviceEntity;

/**
 * 数据上报工具类
 * 处理数据上报相关的操作
 */
public class DataReportUtil {
    private static final String TAG = "DataReportUtil";

    /**
     * 创建数据上报DTO对象
     * @param context 应用上下文
     * @param device PLC设备实体
     * @param measurementPoint 测点配置
     * @param value 数据值
     * @return 数据上报DTO对象
     */
    public static PointDataReportDto createDataReportDto(Context context, PlcDeviceEntity device,
                                                         MeasurementPoint measurementPoint,
                                                         float value) {
        PointDataReportDto dto = new PointDataReportDto();
        
        // 设置设备信息
        dto.setDeviceId(device.getDeviceId());
        
        // 设置测点信息
        dto.setDataPointAddress(measurementPoint.getAddress());
        dto.setDataPointVal(value);
        dto.setDataPointUnit(measurementPoint.getUnit());
        dto.setEnglishName(measurementPoint.getEnglishName());
        // 设置设备唯一标识
        dto.setAndroidDeviceId(DeviceUtils.getDeviceIdentifier(context));
        
        return dto;
    }
    
    /**
     * 异步上报数据到服务器
     * @param dto 数据上报DTO对象
     */
    public static void reportDataAsync(final PointDataReportDto dto) {
        new Thread(() -> {
            try {
                // 转换为JSON
                String jsonData = JsonUtil.toJson(dto);
                
                // 发送HTTP POST请求
                boolean success = HttpUtil.postJson(Constants.API_REPORT_DATA_URL, jsonData);
                
                // 记录上报结果
                if (success) {
                    Log.i(TAG, "数据上报成功: 设备ID=" + dto.getDeviceId() + 
                          ", 地址=" + dto.getDataPointAddress() + 
                          ", 值=" + dto.getDataPointVal());
                } else {
                    Log.e(TAG, "数据上报失败: 设备ID=" + dto.getDeviceId() + 
                          ", 地址=" + dto.getDataPointAddress());
                }
            } catch (Exception e) {
                Log.e(TAG, "数据上报异常: " + e.getMessage(), e);
            }
        }).start();
    }
} 